#include<iostream>
#include<string>
#include<regex>

void req_line(){
    std::cout<<"------------begin-------"<<std::endl;
    std::string  str ="GET /bitejiuyeke?a=b&c=d HTTP/1.1\r\n";
    std::cout<<"1"<<std::endl;
    // std::regex re("(GET|HEAD|POST|PUT|DELETE) (([^?]+)(?:\\?(.*?))?) (HTTP/1\\.[01])(?:\r\n|\n)");
    std::regex re("(GET|HEAD|POST|PUT|DELETE) (([^?]+)(?:\\?(.*?))?) (HTTP/1\\.[01])(?:\r\n|\n)");
    //std::regex re(R"((GET|HEAD|POST|PUT|DELETE) (([^?\s]+)(?:\?(.*?))?) (HTTP/1\\.[01])\r?\n)");
    // std::regex re("GET");
    std::cout<<"2"<<std::endl;
    //(GET|HEAD|POST|PUT|DELETE) :match 任意一个字符
    //" " match 空字符
    //([^?+]) 匹配非'?'字符一个以上
    //（?:...） 表示匹配,但是不捕捉到matchs里。
    //\\? :匹配?
    //.*表示匹配任意个字符，?表示非贪婪的匹配
    //()?表示表达式符可选，也就是可能没有字符匹配也可以
    //[01]表示匹配01都可,
    std::smatch matches;
    std::regex_match(str, matches, re);
    int i=0;
    for(const auto &it:matches){
        std::cout<<i++<<": ";
        std::cout<<it<<std::endl;
    }
    if(matches[4].length() > 0){
        std::cout<<" have param!\n";
    }else{
        std::cout<<"have not param!\n";
    }
    std::cout<< "-----------------first line start ----------\n";
    return ;
}



int main(){
    req_line();
    return 0;
}


